﻿namespace Core.Infra.Data.Maps {
    using System;
    using FluentNHibernate.Mapping;
    using Business.Domain.Entities;

    public class ContaMap : ClassMap<Conta>{
        public ContaMap() {
            Table("tbl_Conta");

            Id(x=>x.Id);

            Map(x => x.Descricao).Not.Nullable();

            //References(x => x.Banco, "IdBanco")
            //    .Not.Nullable();

            HasMany(x => x.Lancamentos)
                .LazyLoad()
                .Cascade.All();

            DiscriminateSubClassesOnColumn<TipoConta>("IdTipoConta", 0);
        }
    }

    public class CorrenteMap : SubclassMap<Corrente>{
        public CorrenteMap() {
            DiscriminatorValue(TipoConta.CORRENTE);
        }
    }

    public class CartaoMap : SubclassMap<Cartao> {
        public CartaoMap() {
            DiscriminatorValue(TipoConta.CARTAO);
        }
    }

    public class EmprestimoMap : SubclassMap<Emprestimo> {
        public EmprestimoMap() {
            DiscriminatorValue(TipoConta.EMPRESTIMO);
        }
    }
}
